package com.jucat.response;

import lombok.Data;

import java.util.List;

/**
 * 分页类型查询的响应数据结构
 * @author manem
 * @param <T> 数据集合中的条目类型
 */
@Data
public class PageResult <T>{
    /**
     * 数据列表
     */
    private List<T> list;
    /**
     * 每页数量
     */
    private int size;
    /**
     * 总页数
     */
    private int pages;
    /**
     * 总记录数
     */
    private int total;

    private PageResult(List<T> list, int size, int pages, int total) {
        this.list = list;
        this.size = size;
        this.pages = pages;
        this.total = total;
    }

    /**
     * 构造分页数据的实例
     * @param total 总数
     * @param size 单页条数
     * @param list 数据列表
     * @return 分页实例
     * @param <T> 条目类型
     */
    public static <T>PageResult<T> of (int total, int size, List<T> list) {
        int pages = total / size;
        if (total % size > 0) {
            pages++;
        }
        return new PageResult<>(list, size, pages, total);
    }

    /**
     * 构造分页数据的实例
     * @param total 总数
     * @param size 单页条数
     * @param pages 总页数
     * @param list 数据列表
     * @return 分页实例
     * @param <T> 条目类型
     */
    public static <T>PageResult<T> of (int total, int size, int pages, List<T> list) {
        return new PageResult<>(list, size, pages, total);
    }
}
